package cache

import (
	"gitee.com/gousing/cache/storage"
)

// -----------------------------------------------------------
// Global Storage 默认缓存仓库
// Driver: Get complex128 complex64 接口代理
// -----------------------------------------------------------

// GetComplex128 获取 complex128 类型的缓存值, 如果不存在或已经过期则返回空值
//   - 支持自动转换类型: string, complex64, complex128 类型转换(注意: complex64/128互转精度损失问题)
func GetComplex128(key string) complex128 {
	val, _ := GetComplex128E(key)
	return val
}

// GetComplex128D 获取 bool 型的缓存值, 如果不存在或已经过期则返回指定的 defaultVal 默认值
//   - 支持自动转换类型: string, complex64, complex128(注意: complex64/128互转精度损失问题)
func GetComplex128D(key string, defaultVal complex128) complex128 {
	val, err := GetComplex128E(key)
	if err != nil {
		return defaultVal
	}
	return val
}

// GetComplex128E 获取 bool 类型的缓存值, 如果不存在或已经过期则返回空值和错误信息
//   - 支持自动转换类型: string, complex64, complex128(注意: complex64/128互转精度损失问题)
func GetComplex128E(key string) (complex128, error) {
	if key == "" {
		return 0, storage.ErrKeyIsEmpty
	}
	var val complex128
	err := GetDefault().Scan(key, &val)
	return val, err
}

// GetComplex64 获取 complex128 类型的缓存值, 如果不存在或已经过期则返回空值
//   - 支持自动转换类型: string, complex64, complex128(注意: complex64/128互转精度损失问题)
func GetComplex64(key string) complex64 {
	val, _ := GetComplex64E(key)
	return val
}

// GetComplex64D 获取 bool 型的缓存值, 如果不存在或已经过期则返回指定的 defaultVal 默认值
//   - 支持自动转换类型: string, complex64, complex128(注意: complex64/128互转精度损失问题)
func GetComplex64D(key string, defaultVal complex64) complex64 {
	val, err := GetComplex64E(key)
	if err != nil {
		return defaultVal
	}
	return val
}

// GetComplex64E 获取 bool 类型的缓存值, 如果不存在或已经过期则返回空值和错误信息
//   - 支持自动转换类型: string, complex64, complex128(注意: complex64/128互转精度损失问题)
func GetComplex64E(key string) (complex64, error) {
	if key == "" {
		return 0, storage.ErrKeyIsEmpty
	}
	var val complex64
	err := GetDefault().Scan(key, &val)
	return val, err
}
